#pragma once

// Before C++20, Goto to Hell.
#if __cplusplus < 202002L
    #error Modern C++ At least Need C++20 Standard.
#endif

// Lite Core
#include <cassert>
#include <cstdint>
#include <cstddef>
#include <utility>
#include <stdexcept>
#include <functional>
#include <algorithm>
//#include <ranges>
#include <memory>
#include <iostream>

// String
#include <cctype>
#include <string_view>
#include <sstream>
#include <regex>

// Types
#include <any>
#include <optional>
#include <variant>

// ADTs
#include <array>
#include <vector>
#include <stack>
#include <list>
#include <forward_list>
#include <set>
#include <unordered_set>
#include <queue>
#include <deque>
#include <map>
#include <unordered_map>
#include <span>
#include <bitset>

// Math and Numeric
#include <cmath>
#include <complex>
#include <limits>
#include <numeric>
//#include <numbers>
#include <valarray>
#include <random>
#include <bit>

// Parallel Case
#include <future>
#include <thread>
#include <atomic>
#include <mutex>
#include <shared_mutex>
#include <condition_variable>

// Extra IO
#include <chrono>
#include <locale>
// Fuck Fuck Very Fuck
#include <filesystem>
namespace fs = std::filesystem;
#include <fstream>
namespace readline{
    #include <readline/readline.h>
}

using u64   = uint64_t;
using u32   = uint32_t;
using u16   = uint16_t;
using u8    = uint8_t;
using i8    = int8_t;
using i16   = int16_t;
using i32   = int32_t;
using i64   = int64_t;
using uint  = unsigned int;
using ulong = unsigned long;

